package com.orange.agent.todayNews;

import com.orange.common.enums.ResultCodeEnum;
import com.orange.common.exception.BusinessException;

/**
 * 核心命名原则 Transaction Code
 * 无论采用哪种方案，都应遵循以下几个原则：
 * 1.唯一性：每个交易码必须唯一对应一个第三方接口调用。
 * 2.可读性：通过交易码能大致了解调用的第三方和接口功能。
 * 3.简洁性：不宜过长，方便在日志和监控系统中使用。
 * 4.规范性：团队内保持统一的命名风格。
 *
 * 命名结构：系统_模块_动作
 * •系统：第三方系统的简称或缩写（如：WX 代表微信，ALIPAY 代表支付宝，SMS 代表短信服务，OSS 代表对象存储）。
 * •模块：第三方系统内部的模块或业务域。
 * •动作：具体的操作类型（如：GET， CREATE， UPDATE， SEND， QUERY）。
 * 举例：
 * •WX_PAY_ORDER：微信支付-创建订单
 * •WX_MP_SENDMSG：微信公众号-发送消息
 * •ALIPAY_TRADE_QUERY：支付宝-交易查询
 * •SMS_LOGIN_SEND：短信服务-登录验证码发送
 * •OSS_FILE_UPLOAD：对象存储-文件上传
 */
public enum TodayNewsURLEnum {

    NEWS_LIST("NEWS_NOW_QUERY","https://ywfstudio.site/news/api/news/","热点新闻");

    /**
     * 交易码
     */
    private String transCode;

    /**
     * 接口地址
     */
    private String url;

    /**
     * 交易描述
     */
    private String describe;

    TodayNewsURLEnum(String transCode, String url, String describe) {
        this.transCode = transCode;
        this.url = url;
        this.describe = describe;
    }

    public String getTransCode() {
        return transCode;
    }

    public void setTransCode(String transCode) {
        this.transCode = transCode;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getDescribe() {
        return describe;
    }

    public void setDescribe(String describe) {
        this.describe = describe;
    }

    /**
     * 根据transCode获取枚举实例
     * @param transCode
     * @return
     */
    public static TodayNewsURLEnum getByTransCode(String transCode) {
        for (TodayNewsURLEnum value : values()) {
            if (value.transCode.equals(transCode)) {
                return value;
            }
        }
        throw new BusinessException(ResultCodeEnum.AGENT_URL_ERROR);
    }
}
